package org.elucid.chess.model;

import java.util.List;
import java.util.Map;

import org.elucid.collections.BiMap;

public interface Game {

	public BiMap<Piece, Square> getPieceSquares();

	public Board getBoard();

	public Move waitForPlayerMove() throws Exception;

	public boolean doMove(Move move);
	public void undoMove(Move move);

	public boolean isGameOver();

	public Player getCurrentPlayer();
	public Player getWhitePlayer();
	public Player getBlackPlayer();
	
	public List<Move> listLegalMoves();

	public Map<Square, Piece> getThreatenedSquares();
	public Map<Square, Piece> getThreateningSquares();
	
	public List<Move> getMoveList();

	public void setGameOver(boolean b);

	public Piece getPlayerPiece(Player player, Class<? extends Piece> pieceClass);

}
